//TIP 要<b>运行</b>代码，请按 <shortcut actionId="Run"/> 或
// 点击装订区域中的 <icon src="AllIcons.Actions.Execute"/> 图标。
//fun main() {
//    val name = "Kotlin"
//    //TIP 当文本光标位于高亮显示的文本处时按 <shortcut actionId="ShowIntentionActions"/>
//    // 查看 IntelliJ IDEA 建议如何修正。
//    println("Hello, " + name + "!")
//
//    for (i in 1..5) {
//        //TIP 按 <shortcut actionId="Debug"/> 开始调试代码。我们已经设置了一个 <icon src="AllIcons.Debugger.Db_set_breakpoint"/> 断点
//        // 但您始终可以通过按 <shortcut actionId="ToggleLineBreakpoint"/> 添加更多断点。
//        println("i = $i")
//    }
//}
//
//fun main()
//{
////    println("Hello World!")
////    var num = 0
////    for (i in 1..5) {
////        num += i
////        println("num: ${num}")
////    }
//
//    print("Enter any word: ")
//    val keyword = readln()
//    print("You entered the word: ")
//    println(keyword)
//}

// 1. 函数体
//fun add(a : Int, b : Int) : Int {
//    return a + b
//}

//// 2. 函数表达式
//fun add(a : Int, b : Int) = a + b
//
//// 3. 返回值 Unit 函数
//fun printAdd(a : Int, b : Int) : Unit {
//    println("a + b = ${a} + ${b} = ${add(a, b)}")
//}
//
//fun main() {
//    val a : Int = readln().toInt()
//    val b : Int = readln().toInt()
//
//    printAdd(a, b)
//
//}


// 1.
//class Shape;

// 2. 此时 height 和 length 为构造函数参数
//class Shape(height : Double, length : Double) {
//    var perimeter : Double = (height + length) * 2
//}

//// 3. height 和 length 为成员变量
//open class Shape(var height : Double, var length : Double) {
//    var perimeter : Double = (height + length) * 2
//}
//
//class Widget(height : Double, length : Double, val center_x : Int, val center_y : Int) : Shape(height, length) {
//    val area = height * length
//}
//
//fun main() {
//    val sh = Shape(1.2, 2.2)
//
//    println(sh.height)
//    println(sh.length)
//    println(sh.perimeter)
//
//    val w = Widget(10.0, 20.0, 1, 2)
//    println(w.area)
//}

// 字符串
//fun main() {
//    var a : Int = 1
//    var s1 = "a is $a" // $a 是一个副本，而非 a 原始值
//    println(s1)
//
//    a = 2
//    val s2 = "${s1.replace("is", "was")}, but now is $a"
//    println(s2)
//    println("after modifying a, s1: $s1")
//}

// if-else
//fun maxOf(a : Int, b : Int) : Int {
//    if (a > b) {
//        return a
//    }
//    else {
//        return b
//    }
//}

//fun maxOf(a : Int, b : Int) : Int = if (a > b) a else b
//
//fun main() {
//    println(maxOf(10, 11))
//}


//fun main() {
//    val items = listOf("banana", "apple", "kiwifruit")
//
//    for (item in items) {
//        print("$item ")
//    }
//    println()
//
//    for (index in items.indices) {
//        print("${items[index]} ")
//    }
//    println()
//
//    for (index in 0..items.size - 1) { // for [] -- 注意越界访问
//        print("${items[index]} ")
//    }
//    println()
//
//    var index = 0
//    while (index < items.size) {
//        print("${items[index]} ")
//        index++
//    }
//    println()
//
//
//}


// 错误语法：
//fun describe(obj : Any) : String {
//    while (obj) {
//        1 -> return "Integer"
//        else -> return "Unknown"
//    }
//}


// 相当于 match
//fun describe(obj : Any) : String =
//    when (obj) {
//        is Int      -> "Int"
//        is Long     -> "Long"
//        is String   -> "String"
//        else        -> "Unknown"
//    }
//
//fun main() {
//    val i = 1
//    val l : Long = 1
//    val s = ""
//    val lt = listOf<Int>()
//
//    println("i is ${describe(i)}")
//    println("l is ${describe(l)}")
//    println("s is ${describe(s)}")
//    println("lt is ${describe(lt)}")
//}


fun main() {
//    val x = 9
//    val y = 10
//
//    if (x in 1..y) {
//        println("fits in range")
//    }

//    val list = listOf("one", "two", "three")
//    if (-1 !in 0..list.lastIndex) {
//        println("-1 is out of range")
//    }
//
//    if (list.size !in list.indices) {
//        println("list size is out of valid list indices range too")
//    }

//    for (i in 0..5) {
//        println(i)
//    }

    for (i in 0..10 step 2) {
        print("$i ")
    }
    println()
    for (i in 10 downTo 0 step 3) {
        print("$i ")
    }
}